package com.secxiot.provider.task.dao;

import com.secxiot.provider.task.entity.Task;
import com.secxiot.provider.task.entity.TaskExample;
import com.secxiot.provider.task.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
public interface TaskDao {
    int countByExample(TaskExample example);

    int deleteByExample(TaskExample example);

    int deleteByPrimaryKey(Long taskId);

    int insert(Task record);

    int insertSelective(Task record);

    List<Task> selectByExample(TaskExample example);

    Task selectByPrimaryKey(Long taskId);

    int updateByExampleSelective(@Param("record") Task record, @Param("example") TaskExample example);

    int updateByExample(@Param("record") Task record, @Param("example") TaskExample example);

    int updateByPrimaryKeySelective(Task record);

    int updateByPrimaryKey(Task record);

    TaskStatusVo selectStatusById(@Param("userId") Long userId, @Param("taskId") Long taskId);

    List<TaskDisplayVo> getPublishedList(@Param("userId") Long userId, @Param("pageNo") Long pageNo,
                                         @Param("pageSize") Long pageSize);

    /**
     * 获取按任务类型区分的已发布任务
     *
     * @param userId   用户id
     * @param taskType 任务类型
     * @param pageNo   页码
     * @param pageSize 条数
     * @return 已经发布的各种任务类型的列表
     */
    List<TaskDisplayVo> getReleasedList(@Param("userId") Long userId, @Param("taskType") String taskType,
                                        @Param("pageNo") Long pageNo, @Param("pageSize") Long pageSize, @Param("userType") String userType);

    List<TaskStatisticsItemVo> selectDayStatistics(
            @Param("userId") Long userId, @Param("deptId") Long deptId,
            @Param("firstDate") Date firstDate, @Param("lastDate") Date lastDate);

    List<TaskStatisticsItemVo> selectPercentStatistics(
            @Param("userId") Long userId, @Param("deptId") Long deptId,
            @Param("firstDate") Date firstDate, @Param("lastDate") Date lastDate);

    /**
     * 折线图(接收)
     *
     * @param receiverId 接受者id
     * @param dateTime   时间节点
     * @return
     */
    List<TaskCountVo> getTaskCountZXJS(@Param("receiverId") Long receiverId, @Param("dateTime") Date dateTime);

    /**
     * 分类饼图(接收)
     *
     * @param receiverId 接受者id
     * @param dateTime   时间节点
     * @return
     */
    List<TaskCountVo> getTaskCountBTJS(@Param("receiverId") Long receiverId, @Param("dateTime") Date dateTime);

    /**
     * 折线图(发布)
     *
     * @param senderId 发布者id
     * @param dateTime 时间节点
     * @return
     */
    List<TaskCountVo> getTaskCountZXFB(@Param("senderId") Long senderId, @Param("dateTime") Date dateTime);

    /**
     * 分类饼图(发布)
     *
     * @param senderId 发布者id
     * @param dateTime 时间节点
     * @return
     */
    List<TaskCountVo> getTaskCountBTFB(@Param("senderId") Long senderId, @Param("dateTime") Date dateTime);

    /**
     * 搜索任务
     *  @param userId 用户id
     * @param searchName 发布人&内容 搜索
     * @param taskType 任务类型
     * @param type 搜索类型(1:接收; 2:发布)
     * @param pageNo
     * @param pageSize
     * @return
     */
    List<TaskDisplayVo> getSearchTaskList(@Param("userId") Long userId, @Param("searchName") String searchName, @Param("taskType") String taskType,
                                          @Param("type") Integer type, @Param("pageNo") Long pageNo, @Param("pageSize") Long pageSize);

    /**
     * 获取接受任务人员是否有未完成任务
     * @param receiverId
     * @return
     */
    List<TaskStatusVo> getTaskByReceiverId(@Param("receiverId") Long receiverId);

    /**
     * 获取出诊人信息
     * @param sosTaskId
     * @return
     */
    List<TaskUserVo> getTaskUserVoList(@Param("sosTaskId") Long sosTaskId);
}